#include <iostream>


int main()
{
    // int *p = (int*)malloc(sizeof(int));
    // if(p == nullptr)
    // {
    //     return -1;
    // }
    // *p = 20;
    // std::cout<<*p<<std::endl;
    
    //1 new 是关键字 malloc是函数 stdlib
    //   2、new不需要计算内存的大小
    //   3、new不需要强转指针
    //   4、不需要判断返回指针  申请空间失败 会抛出异常 结束程序
    //   5、new delete 会调用构造函数和析构函数 malloc不会
    // int *p = new int(10); //():对内存值初始化
    // std::cout<<*p<<std::endl;
    // delete p; //释放指针p

    // //申请数组
    // int *p = new int[5];
    // for(int i = 0;i < 5;i++)
    // {
    //     p[i] = i+1;
    // }
    // for(int i = 0;i < 5;i++)
    // {
    //     std::cout<<p[i]<<" ";
    // }

    // //释放数组
    // delete []p;

    //二维数组
    int** p = new int*[2];
    for(int i = 0;i < 2;i++)
    {
        p[i] = new int[3];
    }
    for(int i = 0;i < 2;i++)
    {
        for(int j = 0; j < 3;j++)
        {
            p[i][j] = i*3+j+1;
            std::cout<<p[i][j]<<" ";
        }
        std::cout<<std::endl;
    }

    for(int i = 0;i < 2;i++)
    {
        delete []p[i];
    }
    
    delete []p;
    return 0;
}